package com.crm.service;

import com.crm.model.Contact;
import com.crm.model.User;

import java.util.List;

/**
 * @author <a href="mailto:huang0510@hotmail.com">HuangHuang</a>
 * @version $Id$
 */
public interface IContactService {

    /**
     * 增加一个新的联系人信息。
     *
     * @param contact 联系人信息实体。
     */
    void create(Contact contact);

    /**
     * 更新联系人信息。
     *
     * @param contact 联系人信息实体。
     */
    void update(Contact contact);


    /**
     * 获取联系人信息列表。
     *
     * @return 联系人信息列表
     */
    List getContacts();


    /**
     * 检查联系人姓名是否已经存在。
     *
     * @param currentName 要检查的联系人姓名。
     * @return 存在返回false，不存在返回true。
     */
    boolean isExistContact(String currentName);

    /**
     * 按用户读取联系人信息列表。如果是管理员或超级管理员用户返回全部联系人信息，
     * 普通用户只返回自己的联系人信息列表。
     *
     * @param user 用户实体。
     * @return 返回权限内的联系人信息列表。
     */
    List getContactsByUser(User user);

    /**
     * 按客户名称获取联系人信息列表。
     * 管理员和超级管理员可以列出指定客户下的所有联系人。
     * 普通用户只能列出指定用户下自己添加的联系人。
     *
     * @param user         用户
     * @param customerId   客户ID
     * @return 返回联系人信息列表。
     */
    List getContactByCustomerId(User user, String customerId);

    /**
     * 按联系人ID获取联系人信息。
     *
     * @param contactId 联系人ID。
     * @return 返回指定的联系人实体对象。
     */
    Contact getContactById(String contactId);

    /**
     * 检索给定关键字并与指定用户相关的客户联系人信息。
     *
     * @param user         用户信息
     * @param searchParams 检索关键字->searchParams[0]; 检索字段->searchParams[1]
     * @return 返回检索到的客户联系人信息
     */
    List getContacts(User user, String[] searchParams);

    /**
     * 删除联系人信息。
     *
     * @param contact 联系人信息
     */
    void delete(Contact contact, User user);

    /**
     * Get amount what contact with pointed customer.
     *
     * @param customerId
     * @return int - Amount of contact.
     */
    int count(String customerId);

    List getRecycleCont(String customerId);
}
